﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Noris.Tools.TraceVisualiser.Interface;
using Noris.Tools.TraceVisualiser.Support;
using Noris.Tools.TraceVisualiser.Forms;
using Noris.Tools.TraceVisualiser.Components;
using System.Windows.Forms;

namespace Noris.Tools.TraceVisualiser.TraceData
{
	internal class Func_SetColor : Func_Base, IFunctionContextMenuItem
	{
		#region IPlugin Members
		/// <summary>
		/// Příznak, že Plugin je aktivní ve standardním běhu (tj. při běžném užiavtelském spuštění).
		/// Plně funkční pluginy tedy vrací true.
		/// Pluginy, které jsou ve vývoji, vrací false, takové jsou zobrazeny / spouštěny pouze v aplikaci, která běží v režimu Debug.
		/// </summary>
		bool IPlugin.Active { get { return true; } }
		#endregion
		#region IFunctionContextMenuItem Members
		bool IFunctionContextMenuItem.IsFunctionSuitableFor(FunctionContextMenuItemSuitableArgs args)
		{
			args.MenuItems.Add(new FunctionMenuItem(20, "Konfigurace barev tohoto prvku", 
				"Zobrazí paletu barev, podle níž se zobrazuje vybraný prvek.",
				true, Noris.Tools.TraceVisualiser.Pics.PicLibrary16.ColorWheel_FromFile, null));
			return true;
		}
		bool IFunctionContextMenuItem.IsMenuItemEnabledFor(FunctionContextMenuItemRunArgs args)
		{
			string colorGroup = _GetColorGroup(args);
			return (!String.IsNullOrEmpty(colorGroup));
		}
		void IFunctionContextMenuItem.Run(FunctionContextMenuItemRunArgs args)
		{
			string colorGroup = _GetColorGroup(args);
			if (String.IsNullOrEmpty(colorGroup)) return;
			this._SetColor(colorGroup);
		}
		private string _GetColorGroup(FunctionContextMenuItemRunArgs args)
		{
			IDataElement element = this.GetElement(args, args.ClickedItem);
			if (element == null)
				return null;
			return element.ColorGroup;
		}
		#endregion
		#region Vlastní zobrazení konfigurace pro danou barvu
		private void _SetColor(string colorGroup)
		{
            Steward.OpenDialogFormInTryCatch(typeof(ColorSettingsForm), "Chyba při práci v okně: %0", delegate(Form form)
            {
                ColorSettingsForm sForm = form as ColorSettingsForm;
                sForm.SettingsChanged += new EventHandler(_SettingsChanged);
                sForm.SettingColorGroup = colorGroup;
            });
		}
		/// <summary>
		/// Po změně konfigurace - překreslit okna všech dokumetů (vliv změny barev)
		/// </summary>
		/// <param name="sender"></param>
		/// <param name="e"></param>
		void _SettingsChanged(object sender, EventArgs e)
		{
			MainAppForm mainForm = Steward.MainForm as MainAppForm;
			if (mainForm != null)
				mainForm.RefreshAllTraceForms();
		}
		#endregion
	}
}
